package HadoopWithSpark.class1st

/**
 * @Author TheKernel
 * @Date 2019/9/29 8:24 下午
 * @Version 1.0
 * @Description 1.6 函数(function)的定义
 */
object FunctionDefinition {

  def main(args: Array[String]): Unit = {
    // 第一种定义方式
    val f = (a: Int, b: Int) => a + b
    println(f(7, 9))
    // 第二种定义方式
    val f2: (Int, Int) => Int = (x, y) => x + y
    println(f2(4, 3))
    // 第三种定义方式
    val f3 = (name: String) => println(name)
    f3("Scala")
    // 第四种定义方式
    val f4: (String) => Unit = (name) => println(name)
    f4("Java")

    def currentTime(): Long = {
      println("打印系统当前时间, 单位为纳秒")
      System.nanoTime()
    }
    // 函数作为输入参数
    def delayed(f: => Long): Unit = {
      println("delayed===============")
      println("time" + f)
    }
    def delayed2(time: Long): Unit = {
      println("delayed2==============")
      println("time" + time)
    }
    delayed(currentTime())  // currentTime => 函数
    val time = currentTime()
    delayed2(time)

    // 可变参数
    def methodManyParams(a: String*) = {
      for (i <- a) print(i + " ")
    }
    methodManyParams("浙江工商大学")
    // 默认参数
    def add(a: Int = 1, b: Int = 2) = {
      println(s"$a+$b=${a+b}")
    }
    add()
    add(2)
    add(3, 4)
  }

}
